﻿#ifndef COMMON_H
#define COMMON_H
#include <QDebug>
#include <QThread>
#include "halconcpp/HalconCpp.h"
#include "ui_mainwindow.h"
#include "ui_plcdlg.h"
#include "ui_cameradlg.h"
#include "ui_detectiondlg.h"
#include "ui_roidlg.h"
#include <string.h>

const int PLCSUCCEED = 0;
const int PLCDBNUMBER = 3;
const int PLCRACK = 0;
const int PLCSLOT = 1;

namespace Ui {
class MainWindow;
class PlcDlg;
}
// plc 信号值
enum SIG_PLC {
    START = 1, //PC_开始
    STOP,  //PC_停止
    MOTOR1, //PC_玻璃盘转动
    MOTOR2, //PC_上料转动
    INCODERA,// 编码器A
    INCODERB, // 编码器B
    INSENSOR, //光纤传感器
    INPRESSSW1,//压力开关
    INPAUSESW,//暂停按钮
    INPRESSSW2,//压力开关
    ORIGINSW,//PC_原点感应
    QPULSE1,  //电机1脉冲
    QPULSE2,//电机2脉冲
    QDIRECTION1,//电机1方向
    QDIRECTION2,//电机2方向
    QENABLED1,//电机1使能
    QENABLED2,//电机2使能
    QGRAP1,//相机1拍照
    QGRAP2,//相机2拍照
    QGRAP3,//相机3拍照
    QGRAP4,//相机4拍照
    QNG1OUTAIR,//PC_NG1
    QNG2OUTAIR,//PC_NG2
    QOKOUTAIR,//PC_OK
    QLINE,//照明灯
    QPLATE,//震动盘
    QINAIR,//系统上气
    QVACUOINOUT,//PC_上料电磁阀
    QLIGHTG,//三色灯-绿
    QLIGHTY,//三色灯-黄
    QLIGHTR,//三色灯-红
    QLIGHTVOX,//三色灯-鸣
    PLATEREV,//PC_玻璃盘转速
    MOTORRATION1,//PC_玻璃盘电机转比
    MOTORRATION2,//PC_上料电机转比
    OPTICAL,//PC_光纤位置
    POSITION_1,//PC_相机1距离
    POSITION_2,//PC_相机2距离
    POSITION_3,//PC_相机3距离
    POSITION_4,//PC_相机4距离
    POSITION_NG1,//PC_NG1距离
    POSITION_NG2,//PC_NG2距离
    POSITION_OK,//PC_OK距离
    RESULT_NUMBER,//PC_料号
    CAMERA_RESULT, //PC_结果
    WARN,         //警告
    ERROR_TIME, // 倒料时间
    ERROR_SITE, // 倒料位置
    STOP_TIME // 停机延时时间

};
struct CameraData
{
    int m_nIndex;                           //编号
    std::string rStrCameraID;
    HalconCpp::HTuple hv_WindowHandle;
    HalconCpp::HObject Hobj;
    int m_nNGorOK;

};
struct CameraInfo
{
    int checkSum = 0;
    int goodSum = 0;
    int badSum = 0;
};

// PLC PLCdlg
struct PlcInfo{
    int Start = 0;
    int Stop = 0;
    int Motor1 = 0;
    int Motor2 = 0;
    int InCoderA = 0;
    int InCoderB = 0;
    int InSensor = 0;
    int InPressSw1 = 0;
    int InPauseSw = 0;
    int InPressSw2 = 0;
    int originSw = 0;
    int QPulse1 = 0;
    int QPulse2 = 0;
    int QDirection1 = 0;
    int QDirection2 = 0;
    int QEnabled1 = 0;
    int QEnabled2 = 0;
    int QGrap1 = 0;
    int QGrap2 = 0;
    int QGrap3 = 0;
    int QGrap4 = 0;
    int QNG1outAir = 0;
    int QNG2outAir = 0;
    int QOKoutAir = 0;
    int QLine = 0;
    int QPlate = 0;
    int QinAir = 0;
    int QVacuoInOut = 0;
    int QLightG = 0;
    int QLightY = 0;
    int QLightR = 0;
    int QLightVox = 0;
    int PlateRev = 0;
    int MotorRation1 = 0;
    int MotorRation2 = 0;
    int Optical = 0;
    int Position_1 = 0;
    int Position_2 = 0;
    int Position_3 = 0;
    int Position_4 = 0;
    int Position_NG1 = 0;
    int Position_NG2 = 0;
    int Position_OK = 0;
    int Result_number = 0;
    int Camera_result = 0;

    int Warn = 0;
    int Error_time = 0;
    int Error_site = 0;
    int Stop_time = 0;
};

// Caemra
struct CameraParameter
{
    double ExposureTimeAbs;
    int OffsetX;
    int OffsetY;
    int Height;
    int Width;
};

struct CameraDlgInfo
{
    int m_nFunction;                    // 0.无 1.打开相机获取相机值 2.启动硬触发 3.启动连续采集 4.保存相机数据
    int m_nCamera;                      // 相机编号
    HalconCpp::HTuple hv_WindowHandle;  // 绑定的 Halcon 控件值
    bool m_bOpen;                       // 是否打开 Halcon 窗口
    int m_nSingle;                      // 单张硬触发
    int m_nConsecutive;                 // 连续采集
    int m_nPlate;                       // 是否启动转盘
    CameraParameter m_nParameter;       // 相机参数
};
// Detection
struct Cam1
{
    //比列
    float Scale;
    //内圆标准尺寸
    float In_Size;
    //内圆补偿值
    float OffSet_In_Size;
    //外圆标准尺寸
    float Out_Size;
    //外圆补偿值
    float OffSet_Out_Size;
    //内圆上限标准偏差
    float Up_In_Deviation;
    //内圆下限标准偏差
    float Down_In_Deviation;
    //外圆上限标准偏差
    float Up_Out_Deviation;
    //外圆下限标准偏差
    float Down_Out_Deviation;
    //是否同心标准，单位像素点
    float Cricle_Deviation;
    //内圆度标准1
    float In_Roundness1;
    //内圆度标准2
    float In_Roundness2;
    //外圆度标准1
    float Out_Roundness1;
    //外圆度标准2
    float Out_Roundness2;
    //外圆形尺寸
    float Out_Circle_Size;
    //内圆形尺寸
    float In_Circle_Size;
    // 存图
    float Save_Image;    // 0  不存  1 存
};

struct Cam2
{
// 换算比例=（实际尺寸/像素大小）
    float Scale;
// 标准尺寸
    float Standard;
// 尺寸补偿
    float OffSet;
// 尺寸允许上限偏差
    float Up_Deviation;
// 尺寸允许下限偏差
    float Down_Deviation;
// //上边与下边的间距
    float Gap_Point;
// //列/横坐标是固定的，根据相机的焦平面确定，相机不动，此参数不动
    float Glass_H;
// //测量边的长度
    float Mes_Length;
    // 存图
    float Save_Image;   // 0  不存  1 存
};
struct CCD_34_PARAME  //相机 34 检测参数结构体
{
    /*
    **********0-12  表面缺陷************

    0 外围变形面积，   默认   50
    1 外围内缩尺寸     默认   5
    2 外围检测区域     默认   5
    3 黑块阈值         默认   40
    4 黑块面积         默认   150
    5 缺陷阈值         默认   8
    6 缺陷面积         默认   350
    7 外围缺陷阈值     默认   3
    8 外围缺陷面积     默认   50

    9 裂痕阈值         默认   2
    10 裂痕长度        默认   15
    11 涂层阈值        默认   180
    12 涂层面积        默认   500


    ************************************
    *********13-20 内孔异物************

    13 内孔阈值      默认18
    14  内孔面积      默认20
    15  内孔内缩尺寸  默认 2
    16  内孔最小尺寸  默认30

    17  台阶检测区域位置     默认 10
    18  台阶检测区域宽度      默认 8
    19  台阶检测阈值        默认35
    20 台阶缺陷面积        默认 50
    *********功能参数*******
    21   是否存带标识图
         0   不存图
         1   存标识图
         2   存不带标识图

    */
    int parame0 = 0;
    int parame1 = 0;
    int parame2 = 0;
    int parame3 = 0;
    int parame4 = 0;
    int parame5 = 0;
    int parame6 = 0;
    int parame7 = 0;
    int parame8 = 0;
    int parame9 = 0;
    int parame10 = 0;
    int parame11 = 0;
    int parame12 = 0;
    int parame13 = 0;
    int parame14 = 0;
    int parame15 = 0;
    int parame16 = 0;
    int parame17 = 0;
    int parame18 = 0;
    int parame19 = 0;
    int parame20 = 0;
    int parame21 = 0;

	//新增了 3个参数  22 外圆半径  23 内圆半径  24 是否台阶
	int parame22 = 0;
	int parame23 = 0;
	int parame24 = 0;


};



// 检测参数
struct DetectionInfo
{
    float fScale;
    float fStandard;
    float fDeviation;
    float fGap_Point;
    float fGlass_H;
    int   iMes_Length;
};

struct DetectionDlgInfo
{
    int m_nFunction = 0;                    // 0.无 1.获取检测参数 2.修改检测参数 3. 4.
    int m_nCamera = 1;                      // 相机编号
    Cam1 m_Cam1;                         // 相机1检测参数
    Cam2 m_Cam2;                          // 相机2检测参数
    CCD_34_PARAME m_Cam3;               // 相机3,4检测参数
    CCD_34_PARAME m_Cam4;
};
// CSV参数
struct CsvData
{
    QString csStarTime;
    QString csStopTime;
    QString csUser;
    QString csSum;
    QString csGood;
    QString csBad;
    QString csGoodRation;
    QString csBadRation;
    QString csCamerBad1;
    QString csCamerBad2;
    QString csCamerBad3;
    QString csCamerBad4;
    QString csIndex;      //料号
    QString csIn_Round;   //内圆
    QString csOut_Round;  //外圆
    QString csIn_Len;     //内直径
    QString csOut_Len;    //外直径
    QString csLen;        //长度
    QString csNGorOK;     //NG是否
};


struct AlgPlace
{
    HalconCpp::HTuple x1 = 0;
    HalconCpp::HTuple y1 = 0;
    HalconCpp::HTuple x2 = 0;
    HalconCpp::HTuple y2 = 0;
    HalconCpp::HTuple hvCCDHandle;
};


#endif // COMMON_H
